科研星球

多组多个变量正态性检验的“一气呵成”

正态性检验是非常重要的检验,就像指示剂一样,符合正态的可以选择参数检验的方法,如t检验、方差分析等,否则需要采用非参数检验的方法。

如在文章里,我们通常会看到以下关于统计方法的描述。

对于数值变量,首先进行正态性检验,如果各组均满足正态性且两组间方差相等,采用均数(标准差)进行统计描述,采用t检验进行组间比较;否则采用中位数(四分位数间距)进行统计描述,采用非参数Wilcoxon秩和检验进行组间比较。对于分类变量,采用例数(百分比)的形式描述,组间比较采用χ2检验。

 

今天我们一起来看看如何“多快好省”的完成正态性检验。



1

导入数据



首先,在excel里全选数据集,右键复制。


下载.jpeg


然后,在Rstudio中,输入:

mydata<-read.delim("clipboard")



 


2

单变量正态性检验



查看age是否正态,输入:

shapiro.test(mydata$age)


输出:

下载 (1).jpeg


结果解读:

因为本案例数据样本量<=5000,故选择Shapiro-Wilk检验(W检验),统计量w=0.98954,p=0.1503,可以认为age是符合正态性的。

 


3

多组多个变量正态性检验




我们做组间比较的时候,需要每组的该变量都检验正态性,如不同bmi组的年龄,只有满足每组都符合正态性,才能选用参数检验,如t检验、方差分析等,否则只能选用非参数检验。


下面我们来看看如何一口气做好每组的正态性检验,比如我们要检验不同bmi组的age、a、b、c、x、y是否符合正态性,输入:

install.packages("dplyr")library(dplyr)mydata[,c("age","a","b","c","x","y")]%>% group_by(mydata$bmig) %>% summarise_all(.funs = funs(p.value = shapiro.test(.)$p.value))


输出:

下载 (2).jpeg



结果解读:

给出了不同bmi组的各变量正态性检验的p值,如果p>0.05,则认为符合正态性。以变量age为例,体重正常组age正态性检验p=0.795,符合正态性。需要注意的是,对于特别小的p值,用了科学计数法表示,如体重正常组变量a的正态性检验p值为7.29e-8,表示7.29*10-8,显然是小于0.05的。


代码使用技巧:



 


4

其他问题



如果样本量>5000呢,则采用修正的Kolmogorov-Smirnov检验(K-S检验),可用

nortest包中的lillie.test()函数来实现。

以ggplot2的diamonds数据集为例,输入:

library(ggplot2)head(diamonds)



输入:

install.packages("nortest")library(nortest)lillie.test(diamonds$price)



输出:

下载 (3).jpeg


没有账号?